As with the world itself, typical computer systems include a variety of separate entities which use different languages. The difference is, of course, that computer systems use programming languages instead of spoken languages. Different programming languages are needed because the variety of tasks which are performed on today's computer systems are usually implemented best when the language used is one designed for the particular purpose at hand. To facilitate the use of several languages, computer systems include programs called compiler programs. Compiler programs are responsible for reducing a human readable computer language into machine readable form. Generally, for each type of computer system there is one compiler program per computer language. Since different computer systems use different machine languages, each compiler program is responsible for reducing a particular programming language into an internal form which is understood by that particular computer system. Individuals skilled in the use of a particular programming language use the language to write computer programs which are translated into the appropriate internal form by the appropriate compiler program. A particular programming language and the internal form generated by the compiler program for use by the computer system can be said to make up a program environment.
As stated, the ability of a computer system to support multiple program environments is desirable in that each program environment can be tailored to perform a different task. In pursuit of this flexibility, computer system manufacturers are designing their computer systems to accommodate more and more program environments. Indeed, critical to the commercial success of a particular computer system is how many program environments it can support. Modern day computer systems can support a number of program environments. For example, the IBM Personal System/2 model 80 can support the C, PASCAL, FORTRAN, COBOL, and BASIC programming languages with the OS/2 and DOS operating systems. This flexibility is not without cost, however. The negative side of supporting a variety of program environments is the difficulty of sharing information. Information sharing is significant in that it eliminates the need to redundantly create or obtain information that already exists. Time and expense are saved whenever the information of one program environment can be used by the computer programs of another program environment.
However, information sharing amongst computer programs of different program environments is more easily said than done. As computer systems become more and more open and flexible, information sharing becomes more and more difficult. Associated with the addition of each program environment is a new way of handling data. Computer programmers may spend a great deal of time and expense writing computer programs which can accommodate the data handling method of a different program environment. In addition to writing or modifying computer programs which can themselves share data, computer programmers also write separate computer programs which have as their sole purpose the conversion of data from one program environment into a form understandable by the computer programs of another program environment.
The problem with solutions of this type is that they are constrained to the view of their own program environment. That is, all computer programs must describe the data in the way prescribed by their own native computer language. This causes several problems. First, since different programming languages are designed to create computer programs which perform different categories of tasks, the methods used to describe data in one program environment seldom correlate directly to the methods used to describe data in another program environment. The problem becomes more acute when one remembers that program environments differ based on computer systems as well as programming languages. Hence, even though two program environments have the same programming language, the way in which data is represented will probably be different if the program environments reside on different computer systems.
The second problem associated with existing data sharing implementations is that computer programmers must intimately understand how data is described in their own program environment, how data is described in the program environment from which the data is to be converted, and how the subject computer systems represent the data. This complexity makes for a difficult, cumbersome, and costly effort.
The third problem associated with existing data sharing implementations is that the programming languages of existing program environments are not designed for writing computer programs to facilitate data sharing. Hence, the ways in which a particular programming language describes data are not readily adaptable to describing how another language may describe data, or for that matter, how another computer system may represent data.
These problems leave computer programmers between the proverbial "rock and a hard place." It is extremely inefficient to write computer programs to create or obtain data which already exists, but attempting to write a computer program which can share data may in the end prove to have been more costly than simply "starting from scratch."